﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Caixa.BLL;

namespace Caixa
{
	public partial class Frm_Deposito : Caixa.Frm_Base
	{
		#region " Enum "

		private enum ContoleFoco
		{
			Conta = 1,
			Valor = 2
		}

		#endregion

		#region " Variables "

		private ContoleFoco Foco;

		#endregion

		#region " Constructor "

		public Frm_Deposito()
		{
			InitializeComponent();
		}

		#endregion

		#region " Events "

		private void Frm_Deposito_Load(object sender, EventArgs e)
		{
			if (CaixaEletronicoBLL.IsLogado)
				txtConta.Text = CaixaEletronicoBLL.ContaLogada.Numero.ToString();

			tecladoVirtual.TeclaAcionada += new Caixa.Controls.TecladoVirtual.TeclaAcionadaEventHandler(tecladoVirtual_TeclaAcionada);
		}

		private void btnCancelar_Click(object sender, EventArgs e)
		{
			this.Close();
		}

		private void txtConta_Enter(object sender, EventArgs e)
		{
			Foco = ContoleFoco.Conta;
		}

		private void txtValor_Enter(object sender, EventArgs e)
		{
			Foco = ContoleFoco.Valor;
		}

		protected void tecladoVirtual_TeclaAcionada(Caixa.Controls.TecladoVirtual.Tecla tecla)
		{
			switch (tecla)
			{
				case Caixa.Controls.TecladoVirtual.Tecla.Num0:
				case Caixa.Controls.TecladoVirtual.Tecla.Num1:
				case Caixa.Controls.TecladoVirtual.Tecla.Num2:
				case Caixa.Controls.TecladoVirtual.Tecla.Num3:
				case Caixa.Controls.TecladoVirtual.Tecla.Num4:
				case Caixa.Controls.TecladoVirtual.Tecla.Num5:
				case Caixa.Controls.TecladoVirtual.Tecla.Num6:
				case Caixa.Controls.TecladoVirtual.Tecla.Num7:
				case Caixa.Controls.TecladoVirtual.Tecla.Num8:
				case Caixa.Controls.TecladoVirtual.Tecla.Num9:
					if (Foco.Equals(ContoleFoco.Conta))
					{
						txtConta.Text += Convert.ToInt32(tecla).ToString();
					}
					else if (Foco.Equals(ContoleFoco.Valor))
					{
						txtValor.Text += Convert.ToInt32(tecla).ToString();
						txtValor.Text = string.Format("{0:f2}", txtValor.Text);
					}

					break;
				case Caixa.Controls.TecladoVirtual.Tecla.Corrige:
					if (Foco.Equals(ContoleFoco.Conta))
					{
						if (txtConta.Text.Length > 0)
							txtConta.Text = txtConta.Text.Substring(0, txtConta.Text.Length - 1);
					}
					else if (Foco.Equals(ContoleFoco.Valor))
					{
						if (txtValor.Text.Length > 0)
							txtValor.Text = txtValor.Text.Substring(0, txtValor.Text.Length - 1);
						txtValor.Text = string.Format("{0:f2}", txtValor.Text);
					}
					break;
				case Caixa.Controls.TecladoVirtual.Tecla.Confirma:
					this.Close();

					bool sucess = false;

					Frm_Processando frm_Processando = new Frm_Processando();
					frm_Processando.Show();
					frm_Processando.Refresh();
					System.Threading.Thread.Sleep(500);

					// Chama o processamento de efetuar o depósito
					sucess = EfetuarDeposito();

					if (sucess)
					{
						frm_Processando.Mensagem = "Depósito realizado com sucesso!";
						frm_Processando.Visible = false;
						frm_Processando.KeyPreview = true;
						frm_Processando.ShowDialog();
					}
					else
					{
						frm_Processando.Dispose();
					}

					break;
				default:
					break;
			}
		}

		#endregion

		#region " Methods "

		private bool EfetuarDeposito()
		{
			bool success = false;

			try
			{
				double valor;
				double.TryParse(string.Format("{0}", txtValor.Text.Replace("R$", "").Replace(" ", "")), out valor);

				int numeroConta;
				int.TryParse(string.Format("{0}", txtConta.Text.Replace(".", "").Replace("-", "")), out numeroConta);

				//Realiza o depósito na conta mencionada
				success = ContaBLL.Deposito(ContaBLL.GetByNumero(numeroConta), valor);
			}
			catch (Exception e)
			{
				MessageBox.Show(e.Message, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Warning);
			}

			return success;
		}

		#endregion
	}
}
